home *** CD-ROM | disk | FTP | other *** search
/ PD Collection CD 1 / PD Collection CD 1.iso / textual / tex / files / !tex / TeXsource / beebe / h / fixpos < prev    next >
Encoding:
Text File  |  1990-05-18  |  1.3 KB  |  43 lines

  1. /* -*-C-*- fixpos.h */
  2. /*-->fixpos*/
  3. /**********************************************************************/
  4. /******************************* fixpos *******************************/
  5. /**********************************************************************/
  6. #ifdef __STDC__
  7. COORDINATE
  8. fixpos(register COORDINATE cc, register INT32 c, register float cnvfac)
  9. {
  10. #else
  11. COORDINATE
  12. fixpos(cc,c,cnvfac)
  13. register COORDINATE cc;        /* coordinates in device pixels */
  14. register INT32 c;        /* coordinates in DVI units */
  15. register float cnvfac;        /* converts DVI units to pixels */
  16. {
  17. #endif
  18.     register COORDINATE ccc;
  19.  
  20.     /*
  21.     A sequence  of consecutive  rules, or  consecutive characters  in  a
  22.     fixed-width font whose width is not an integer number of pixels, can
  23.     cause |cc| to  drift far away  from a correctly  rounded value.   We
  24.     follow DVITYPE Version 2.6 to ensure  that the amount of drift  will
  25.     never exceed MAXDRIFT pixels.  DVITYPE Version 2.0 did not do  this,
  26.     and the results could be visibly AWFUL!!
  27.     */
  28.  
  29.     ccc = PIXROUND(c,cnvfac);
  30.     if (ABS(ccc-cc) > MAXDRIFT)
  31.     {        /* drag cc toward the correctly rounded value ccc */
  32.         if (ccc > cc)
  33.     {
  34.         cc = ccc - MAXDRIFT;
  35.     }
  36.         else
  37.     {
  38.             cc = ccc + MAXDRIFT;
  39.     }
  40.     }
  41.     return (cc);
  42. }
  43.